package sort;

/**
 * 冒泡排序
 * 假如标志位flag优化排序,如果后边没有发生数据交换则已有序,无需再进行排序
 * @author mengxin
 * 
 */
public class BubbleSort{
	private int[] score;

	public BubbleSort(int[] score) {
		this.score = score;
	}

	public void sort() {
		boolean flag = true;
		for (int i = 0; i < score.length - 1 && flag; i++) { // 最多做n-1趟排序
			flag = false;
			for (int j = 0; j < score.length - i - 1; j++) { // 对当前无序区间score[0......length-i-1]进行排序(j的范围很关键，这个范围是在逐步缩小的)
				if (score[j] < score[j + 1]) { // 把小的值交换到后面
					int temp = score[j];
					score[j] = score[j + 1];
					score[j + 1] = temp;
					flag = true;
				}
			}
			System.out.print("第" + (i + 1) + "次排序结果：");
			for (int a = 0; a < score.length; a++) {
				System.out.print(score[a] + "\t");
			}
			System.out.println("");
		}
	}

	@Override
	public String toString() {
		System.out.print("最终排序结果：");
		StringBuffer sb = new StringBuffer();
		for (int a = 0; a < score.length; a++) {
			sb.append(score[a]);
			sb.append("\t");
		}
		return sb.toString();
	}

	public static void main(String[] args) {
		BubbleSort bs = new BubbleSort(new int[] { 67, 89, 75, 87, 69, 90, 99,
				100 });
		bs.sort();
		System.out.println(bs.toString());

	}
}
